From: kaf24@firebug.cl.cam.ac.uk Date: Wed, 28 Sep 2005 12:49:33 +0000 (+0100) Subject: Currently the mmio_operands assumes writing to memory when operand 0 is X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16769^2~16^2~17^2~7 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=69f773c57276c97ea79bbfa7324366b211d36e79;p=xen.git Currently the mmio_operands assumes writing to memory when operand 0 is register or immediate, this is false for cmp/test opcode. This patch resolve this problem, please review. Signed-off-by: Yunhong Jiang Signed-off-by: Jun Nakajima --- diff --git a/xen/arch/x86/vmx_platform.c b/xen/arch/x86/vmx_platform.c index d7ef47d718..8052b1c7cd 100644 --- a/xen/arch/x86/vmx_platform.c +++ b/xen/arch/x86/vmx_platform.c @@ -833,12 +833,16 @@ void handle_mmio(unsigned long va, unsigned long gpa) mmio_operands(IOREQ_TYPE_XOR, gpa, &mmio_inst, mpcip, regs); break; - case INSTR_CMP: - mmio_operands(IOREQ_TYPE_COPY, gpa, &mmio_inst, mpcip, regs); - break; - + case INSTR_CMP: /* Pass through */ case INSTR_TEST: - mmio_operands(IOREQ_TYPE_COPY, gpa, &mmio_inst, mpcip, regs); + mpcip->flags = mmio_inst.flags; + mpcip->instr = mmio_inst.instr; + mpcip->operand[0] = mmio_inst.operand[0]; /* source */ + mpcip->operand[1] = mmio_inst.operand[1]; /* destination */ + mpcip->immediate = mmio_inst.immediate; + + /* send the request and wait for the value */ + send_mmio_req(IOREQ_TYPE_COPY, gpa, 1, mmio_inst.op_size, 0, IOREQ_READ, 0); break; default: